Each day, software systems become increasingly more complex, both in terms of what they do, and the amount of software development that goes into creating them. A problem with developing such complex software systems is the need to manage dependencies between the various components that comprise the system. This is especially a problem with enterprise level systems that include many organizational components, and have many, hundreds perhaps, of such interdependencies that must be tracked and managed if the software system is to operate reliably and as expected.
With an enterprise system the problem must be assessed at various levels. For example, an enterprise level ecommerce system may comprise many different organization components, such as a foundation server product, a B2B or integration product, and perhaps a B2C ecommerce product. An example of such an enterprise system is BEA's WebLogic platform, which includes a server product (WebLogic Server), together with optional Integration components, Portal components, etc. In this type of environment, the “components” are often full-blown software products in their own right, but are typically packaged together with the server product for marketing reasons and to suit the needs of customers. The individual organization components are often optional, so they may or may not be present in any one enterprise deployment. Importantly, the individual components may also have been developed separately, by different teams of software engineers, and even different companies. An important aspect of this development process is ensuring each organization component behaves itself with respect to all other components, and that any function calls which one component may make on another component are valid and allowable. These are often referred to as “dependencies”. Otherwise, if dependencies are not managed properly inconsistencies will show up in one or all of the affected components.
At another level, within a particular organization component, for example within the WebLogic Server product itself, that organization component or piece of the enterprise system will itself have many components. For example, in the case of an application server, the application server might include a JMS (JAVA™ MESSAGING SYSTEM) component, a http Servlet component, and an EJB (ENTERPRISE JAVA™ BEAN) component, among others. As with the larger scale view, each of the components at this level must interact correctly, and dependencies between the components must be managed properly. At this level, dependencies may be even more critical, since the operation of a particular component can be made or broken on the success or absence of a particular dependency. However, the dependency is often subtle and difficult to catch.
At a third level, the enterprise system usually interacts with other system, particularly clients. A client interacts typically by making function calls and accessing classes at the enterprise system. With a move to thinner clients, the need for knowing just which classes need be present at the client, and which can remain at the server, becomes a more important issue. Viewed from this aspect, the client and the server include dependencies that must be assessed and properly managed in order to make the client as thin as possible and still ensure reliable performance.
To date, little has been done to address these issues. Their exists a variety of software development tools that allow a developer to test their application again a set of pre-ordained rules. However, these rules are difficult to maintain and update, and in any case are of less use in detecting unusual situations, that would otherwise slip through a normal rule-checking process. Traditional systems are also useless for any for of serendipitous dependency checking for purposes of getting a good overview of the entire enterprise systems' dependencies. Traditional rules often fail when dealing with the subtleties present in inter-component relations. Tools that address these problems, and also assist in driving the overall software development process are of great use.